VB.NET	Read Assembly Attributes using System.Reflection 
Listing A You load your app's assembly attributes with the GetAssemblyAttributes function, and return them in the AssemblyAttributes structure. Assembly attributes are visible when you right-click your EXE file, click the Properties item, and click on the Version tab. Pass the name of your app's assembly (its EXE name) to read its contents. The oAssembly variable is declared as [Assembly] with brackets because Assembly is a reserved keyword in VB.NET. 

Private Structure AssemblyAttributes
	Public Name As String
	Public Title As String
	Public Description As String
	Public Product As String
	Public Version As String
	Public Company As String
	Public Copyright As String
	Public Trademark As String
End Structure
Private Function GetAssemblyAttributes _
	(ByVal AssemblyName As String) _
	As AssemblyAttributes
Dim Index As Integer
Dim sNameComponents() As String
Dim oCustAttrs As Object()
Dim oAssembly As [Assembly]
Dim aCompany As AssemblyCompanyAttribute
Dim aCopyright As AssemblyCopyrightAttribute
Dim aDescription As AssemblyDescriptionAttribute
Dim aProduct As AssemblyProductAttribute
Dim aTrademark As AssemblyTrademarkAttribute
Dim aTitle As AssemblyTitleAttribute
'set requested name in structure
GetAssemblyAttributes.Name = AssemblyName
Try
	'Load Assembly & get version from FullName 
	oAssembly = [Assembly].Load(AssemblyName)
	'FullName comes back in this format: 
	'"AboutTest, Version=1.0.641.37598, ..."
	sNameComponents = _
		oAssembly.FullName.Split(",")
	GetAssemblyAttributes.Version = _
		sNameComponents(1).Split("=")(1)
	'Get Assembly attributes & obtain values
	oCustAttrs = _
		oAssembly.GetCustomAttributes(False)
	For Index = 0 To oCustAttrs.Length - 1
		Select Case oCustAttrs _
			(Index).GetType.ToString
			Case _
"System.Reflection.AssemblyCompanyAttribute"
				aCompany = oCustAttrs(Index)
				GetAssemblyAttributes.Company = _
					aCompany.Company.ToString
			Case _
"System.Reflection.AssemblyCopyrightAttribute"
				aCopyright = oCustAttrs(Index)
				GetAssemblyAttributes.Copyright = _
					aCopyright.Copyright.ToString
			Case _
"System.Reflection.AssemblyDescriptionAttribute"
				aDescription = oCustAttrs(Index)
			  GetAssemblyAttributes.Description = _
					aDescription.Description.ToString
			Case _
"System.Reflection.AssemblyProductAttribute"
				aProduct = oCustAttrs(Index)
				GetAssemblyAttributes.Product = _
					aProduct.Product.ToString
			Case _
"System.Reflection.AssemblyTrademarkAttribute"
				aTrademark = oCustAttrs(Index)
				GetAssemblyAttributes.Trademark = _
					aTrademark.Trademark.ToString
			Case _
"System.Reflection.AssemblyTitleAttribute"
				aTitle = oCustAttrs(Index)
				GetAssemblyAttributes.Title = _
					aTitle.Title.ToString
		End Select
	Next
Catch
	'clear structure Name field if load fails
	GetAssemblyAttributes.Name = ""
End Try
End Function

